/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package mattespill.gui;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import mattespill.*;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.io.FileInputStream;
import java.io.InputStream;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;

import javax.swing.JPanel;
import sun.audio.AudioPlayer;
import sun.audio.AudioStream;

/**
 *
 * @author Erik
 */
public class GUIKrokodille extends JPanel {

    private Oversikt oversikt;
    JPanel panelBgImg = null;

    int sizex = 0;
    int sizey = 0;
    int plasseringX = 200;

    private int bruker;
    private int nivaa;
    private boolean nivaaokning = false;
    private Regnestykke venstretemp;
    private Regnestykke høyretemp;

    JLabel venstrelabel;
    JLabel høyrelabel;
    JLabel hintusLabel;
    JLabel snakkeLabel;

    JLabel tekst;
    JLabel tekst2;
    JLabel tekst3;
    JLabel label;
    JButton avslutt = new JButton("X");
    
    //private BufferedImage bg = ImageLoader.loadImage("png", "bakgrunn");
    
    
    Image bg                = new ImageIcon("src/mattespill/gui/images/bakgrunn.png").getImage();
    Image crocimg           = new ImageIcon("src/mattespill/gui/images/croc.png").getImage();
    Image crocflip          = new ImageIcon("src/mattespill/gui/images/crocflip.png").getImage();
    Image crocopen          = new ImageIcon("src/mattespill/gui/images/crocopen.png").getImage();
    Image crocopenflip      = new ImageIcon("src/mattespill/gui/images/crocopenflip.png").getImage();
    Image kyllingVenstre    = new ImageIcon("src/mattespill/gui/images/chicken.png").getImage();
    Image kyllingHøyre      = new ImageIcon("src/mattespill/gui/images/chicken.png").getImage();
    Image kyllinghopp       = new ImageIcon("src/mattespill/gui/images/chickenhopp.png").getImage();
    ImageIcon hintus        = new ImageIcon("src/mattespill/gui/images/hintus_croc.png");
    ImageIcon snakkeboble   = new ImageIcon("src/mattespill/gui/images/snakkeboble.png");
    GUIStatus status;
    
    AudioStream as = null;
    InputStream in = null;

    public GUIKrokodille (Oversikt o, boolean nyttSpill) {
        this.oversikt = o;
        status = new GUIStatus(o);
        oversikt.genererRegnestykker();
        setLayout(new BorderLayout());
        setPreferredSize(new Dimension(bg.getWidth(null),bg.getHeight(null)));
        addMouseListener(new MusLytter());
        addMouseMotionListener(new MusLytter());
//        setDefaultCloseOperation(EXIT_ON_CLOSE);
        panelBgImg = new JPanel() {
            public void paintComponent(Graphics g) {
                g.drawImage(bg,0,0,null);
                g.drawImage(kyllingVenstre, 30, 380, null);
                g.drawImage(kyllingHøyre, 660, 380, null);
                g.drawImage(crocimg, plasseringX, 390, null);
            }
        };
        label = new JLabel("POENG:" + o.getStatus().getPoeng());
        tekst = new JLabel("");
        tekst2 = new JLabel("");
        tekst3 = new JLabel("");
        status.setBounds(0, 0, 800, 50);
        venstrelabel  = new JLabel(oversikt.getVenstre().getRegnestykke());
        høyrelabel  = new JLabel(oversikt.getHøyre().getRegnestykke());
        venstretemp = oversikt.getVenstre();
        høyretemp = oversikt.getHøyre();
        hintusLabel = new JLabel(hintus);
        snakkeLabel = new JLabel(snakkeboble);
        venstrelabel.setFont(new Font("Comic Sans MS",Font.BOLD,22));
        høyrelabel.setFont(new Font("Comic Sans MS",Font.BOLD,22));
        tekst.setFont(new Font("Comic Sans MS",Font.BOLD,16));
        tekst2.setFont(new Font("Comic Sans MS",Font.BOLD,16));
        tekst3.setFont(new Font("Comic Sans MS",Font.BOLD,16));
        venstrelabel.setForeground(Color.white);
        høyrelabel.setForeground(Color.white);
        hintusLabel.setBounds(508,279,hintus.getIconWidth(),hintus.getIconHeight());
        snakkeLabel.setBounds(80,30,snakkeboble.getIconWidth(),snakkeboble.getIconHeight());
        høyrelabel.setBounds(665, 500, 120, 100);
        venstrelabel.setBounds(45, 500, 120, 100);
        tekst.setBounds(180,0,snakkeboble.getIconWidth(),snakkeboble.getIconHeight()-25);
        tekst2.setBounds(170,30,snakkeboble.getIconWidth(),snakkeboble.getIconHeight()-25);
        tekst3.setBounds(180,60,snakkeboble.getIconWidth(),snakkeboble.getIconHeight()-25);
        avslutt.setBounds(719, 6, 50, 40);
        //avslutt.setBackground(new Color(255,255,255,150));
        avslutt.addActionListener(new KnappLytter());
        tekst.setVisible(true);
        tekst2.setVisible(true);
        tekst3.setVisible(true);
        snakkeLabel.setVisible(false);
        panelBgImg.add(venstrelabel);
        panelBgImg.add(høyrelabel);
        panelBgImg.add(hintusLabel);
        panelBgImg.add(snakkeLabel);
        
        add(avslutt);

        add(status);
        add(tekst);
        add(tekst2);
        add(tekst3);
        panelBgImg.setLayout(null);
        add(panelBgImg);
        if(nyttSpill){
            tekst.setText("KROKODILLEN JENS VIL SPISE KYLLINGER.");
            tekst2.setText("HJELP JENS MED Å TRYKKE PÅ DET STØRSTE TALLET.");
            tekst3.setText("DU KAN HELE TIDEN TRYKKE PÅ MEG FOR HJELP!");
            tekst.setVisible(true);
            tekst2.setVisible(true);
            snakkeLabel.setVisible(true);
        }
    }
   
    public class MusLytter implements MouseMotionListener,MouseListener {

        private java.util.Date pressed;
        private boolean hint = false;

        public void mouseClicked(MouseEvent e) {            
        }
        public void mousePressed(MouseEvent e) {
            pressed = new java.util.Date();
            hint = false;
            nivaaokning = false;
            tekst.setText("");
            tekst2.setText("");
            tekst3.setText("");
            if(!snakkeLabel.isVisible()){
                if(e.getX() >= hintusLabel.getLocation().getX() && e.getX() <= hintusLabel.getLocation().getX()+hintusLabel.getWidth() ){
                    if(e.getY() >=hintusLabel.getLocation().getY() && e.getY() <= hintusLabel.getLocation().getY()+hintusLabel.getHeight() ){
                        hint = true; // SJEKKER OM HINTUS ER TRYKKET PÅ
                    }
                }

                else if(e.getX() <= crocimg.getWidth(null) / 2 + plasseringX){
                    plasseringX -= 80;
                    crocimg = crocopenflip;
                    kyllingVenstre = kyllinghopp;
                    repaint();
                }else if(e.getX() >= crocimg.getWidth(null) / 2 + plasseringX){
                   plasseringX += 80;
                   kyllingHøyre = kyllinghopp;
                   crocimg = crocopen;
                   repaint();
                }
            }else{
                
            }
        }

        private GUIStatus update(){
            
            status = new GUIStatus(oversikt);  
            return status;
            
        }
        
        private void rettSvar(){
            int nivaa = oversikt.getNivaa();
            try{
                in = new FileInputStream("src/mattespill/gui/sounds/cluck2.wav");
                as = new AudioStream(in);
            }catch(Exception e){

            }
            oversikt.rettSvar(1);
            if(nivaa != oversikt.getNivaa()){
                nivaaokning = true;
            }else{
                venstrelabel.setText(oversikt.getVenstre().getRegnestykke());
                høyrelabel.setText(oversikt.getHøyre().getRegnestykke());
                venstretemp = oversikt.getVenstre();
                høyretemp = oversikt.getHøyre();
                AudioPlayer.player.start(as);
            }
        }
        private void feilSvar() {
            
            if(!oversikt.feilSvar()){ // Game over!
                 try{
                    in = new FileInputStream("src/mattespill/gui/sounds/game-over.wav");
                    as = new AudioStream(in);
                    oversikt.nyttSpill();
                    status = update();
                    GUIGameOver g = new GUIGameOver(oversikt);
                    JPanel mainPanel = (JPanel)getParent();
                    mainPanel.removeAll();// dette er sub-panelet
                    mainPanel.repaint();
                    mainPanel.add(g);
                    mainPanel.revalidate();
                    g.repaint();
                }catch(Exception e){

                }
                 
            }else{
                try{
                    in = new FileInputStream("src/mattespill/gui/sounds/wrong-answer.wav");
                    as = new AudioStream(in);
                    status.getRootPane().revalidate();
                }catch(Exception e){

                }
                
            }
            AudioPlayer.player.start(as);
            venstrelabel.setText(oversikt.getVenstre().getRegnestykke());
            høyrelabel.setText(oversikt.getHøyre().getRegnestykke());
            venstretemp = oversikt.getVenstre();
            høyretemp = oversikt.getHøyre();
        }
        public void mouseReleased(MouseEvent e) {
            status.setPenger(oversikt.getStatus().getPenger());
            status.setPoeng(oversikt.getStatus().getPoeng());
            status.setLiv(oversikt.getStatus().getLiv());
            status.setNivaa(oversikt.getNivaa());
            
            java.util.Date released = new java.util.Date();
            int resultat = 0;
            if(!snakkeLabel.isVisible()){
                if(e.getX() >= hintusLabel.getLocation().getX() && e.getX() <= hintusLabel.getLocation().getX()+hintusLabel.getWidth() ){
                    if(e.getY() >=hintusLabel.getLocation().getY() && e.getY() <= hintusLabel.getLocation().getY()+hintusLabel.getHeight() ){
                        if(hint){
                            if(oversikt.trekkPenger()){
                                snakkeLabel.setVisible(true);
                                oversikt.genererHint();
                                tekst.setText(oversikt.res.tekst1);
                                tekst2.setText(oversikt.res.tekst2);
                                tekst3.setText(oversikt.res.tekst3);
                                oversikt.genererRegnestykker();

                                venstrelabel.setText(oversikt.getVenstre().toString());
                                høyrelabel.setText(oversikt.getHøyre().toString());
                                if(oversikt.sjekkSvar().getResultat() == oversikt.getHøyre().getResultat()){
                                    plasseringX=280;
                                    crocimg = new ImageIcon("src/mattespill/gui/images/crocopen.png").getImage();
                                    kyllingHøyre = new ImageIcon("src/mattespill/gui/images/chicken.png").getImage();
                                    repaint();
                                }else{
                                    plasseringX =120;
                                    crocimg = crocopenflip;
                                    kyllingVenstre = new ImageIcon("src/mattespill/gui/images/chicken.png").getImage();
                                    repaint();
                                }
                            }else{
                                snakkeLabel.setVisible(true);
                                tekst.setText("DU HAR DESVERRE IKKE MER PENGER IGJEN!");
                                tekst2.setText("");
                                tekst3.setText("");
                            }
                        }
                    }
                }else{
                    while(pressed.getTime() <= released.getTime()+100){
                        pressed = new java.util.Date();
                        plasseringX = 200;
                        if(e.getX() <= crocimg.getWidth(null)/2+plasseringX){
                            crocimg = crocflip;
                            kyllingVenstre = new ImageIcon("src/mattespill/gui/images/chicken.png").getImage();
                            repaint();
                            resultat = oversikt.getVenstre().getResultat(); // VENSTRE
                        }else{
                            crocimg = new ImageIcon("src/mattespill/gui/images/croc.png").getImage();
                            kyllingHøyre = new ImageIcon("src/mattespill/gui/images/chicken.png").getImage();
                            repaint();
                            resultat = oversikt.getHøyre().getResultat(); // HØYRE
                        }
                    }
                    if(oversikt.sjekkSvar().getResultat() == resultat ){
                        rettSvar();

                    }else{
                        feilSvar();
                    }
                    if(nivaaokning){
                        try{
                            in = new FileInputStream("src/mattespill/gui/sounds/lvlup.wav");
                            as = new AudioStream(in);

                        }catch(Exception ej){

                        }
                        oversikt.giPenger();
                        AudioPlayer.player.start(as);
                        snakkeLabel.setVisible(true);
                        tekst.setText("GRATULERER DU GIKK OPP TIL NIVÅ "+oversikt.getNivaa()+" !");
                        tekst2.setText("");
                        tekst3.setText("");
                    }else{
                        snakkeLabel.setVisible(false);
                        tekst.setText("");
                        tekst2.setText("");
                        tekst3.setText("");
                    }
                }
            }else{
                oversikt.genererRegnestykker();
                venstrelabel.setText(oversikt.getVenstre().getRegnestykke());
                høyrelabel.setText(oversikt.getHøyre().getRegnestykke());
                snakkeLabel.setVisible(false);
                plasseringX = 200;
            }
        }

        public void mouseEntered(MouseEvent e) {
            //throw new UnsupportedOperationException("Not supported yet.");
        }

        public void mouseExited(MouseEvent e) {
            //throw new UnsupportedOperationException("Not supported yet.");
        }

        public void mouseDragged(MouseEvent e) {
            //throw new UnsupportedOperationException("Not supported yet.");
        }

        public void mouseMoved(MouseEvent e) {
            
             
            if(!snakkeLabel.isVisible()){
                if(e.getX() <= crocimg.getWidth(null)/2+plasseringX){
                    crocimg = crocflip;
                    repaint();
                   
                }else{
                    crocimg = new ImageIcon("src/mattespill/gui/images/croc.png").getImage();
                    repaint();
                    
                }
            }else{
                
            }
        }
    }
    private class KnappLytter implements ActionListener {

        public void actionPerformed(ActionEvent e) {
            JButton  hendelse = (JButton)e.getSource();
            if(hendelse.equals(avslutt)){
                GUIFortsett h = new GUIFortsett(oversikt);
                sendVidere(h);
            }

        }
        private void sendVidere(JPanel j){
            JPanel mainPanel = (JPanel)getParent();
            mainPanel.removeAll(); // dette is the sub-panel
            mainPanel.add(j);
            mainPanel.repaint();
            mainPanel.revalidate();
            j.repaint();
        }

    }
}

